home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 4 / QRZ Ham Radio Callsign Database - Volume 4.iso / files / dsp / 56ktools / a5611.tz / a5611 / examples / sloader.a56 < prev    next >
Text File  |  1992-08-11  |  5KB  |  195 lines

  1. ; Originally taken from came from Motorola's Dr. BuB DSP board.
  2. ; Obtained from Todd Day's FTP archive as sloader.asm
  3. ; Modified for TDSG56 project by Quinn Jensen (jensenq@npd.novell.com)
  4. ;
  5. ; Text from original:
  6. ;    Serial Loader for the DSP56000.
  7. ;    This loader initializes    the serial communications interface (SCI)
  8. ;    on the DSP56001    for 9600 baud and then loads OMF records (output
  9. ;    by the DSP56000    assembler) into    internal memory.  The loader takes
  10. ;    the upper 128 bytes of P memory    allowing the lower memory from
  11. ;    $0000-(LDRMEM-1) to be used by the user.  The following    records    are
  12. ;    interpreted:
  13. ;        _DATA X ADDR
  14. ;        _DATA Y ADDR
  15. ;        _DATA P ADDR
  16. ;        _END ADDR
  17. ;    After the END record is    encountered, the loader    jumps to the address
  18. ;    in the END record.  Note that an address MUST be present in the
  19. ;    END record (the    program    must contain at    least one P segment).
  20. ;
  21. ;    To generate a EPROM of this loader (8Kx8), perform the following:
  22. ;    $ asm56000 -b -l -a sloader
  23. ;    $ srec sloader
  24. ;
  25. ;    The EPROM is in    file SLOADER.P.     To program the    EPROM, set the
  26. ;    programmer to MOTOROLA S record    format,    download the file with
  27. ;    a zero address offset and program the part.
  28. ;
  29. ;    BTW, S record format is    LSB MidSB MSB (what! Intel format? :-)
  30. ;    Took me    a few hours to figure this one out!  [Not really.  S records
  31. ;    are big-endian, its just the 56001 boot loader that wants LSB first.
  32. ;    -QJ]
  33. ;
  34. ;    If you don't have the program srec (where can I    get this?),
  35. ;    you have to do some gnarly contortions on the .LOD file.
  36. ;
  37. ;    So, if your .LOD file resulting    from compiling this program
  38. ;    looks like this:
  39. ;
  40. ;    _START SLOADER 0000 0000
  41. ;
  42. ;    _DATA P    0020
  43. ;    010203 040506 070809
  44. ;    _END 0020
  45. ;
  46. ;    then, program your PROM    with this sequence:
  47. ;    $0020    0302  0106  0504  0908    07.....    etc. (Fun, eh? :)
  48. ;
  49. ;
  50. ;    The loader loads the following memory spaces:
  51. ;        X -    0 to FF
  52. ;        Y -    0 to FF
  53. ;        P -    0 to LDRMEM-1
  54. ;
  55.     PAGE    68,66,1,1
  56.  
  57. SCR    EQU    $FFF0        ;SCI CONTROL REGISTER
  58. SCCR    EQU    $FFF2        ;SCI CLOCK CONTROL REGISTER
  59. PCC    EQU    $FFE1        ;PORT C    CONTROL    REGISTER
  60. RDRF    EQU    $2        ;RECEIVE DATA REGISTER FULL FLAG
  61. SSR    EQU    $FFF1        ;SCI STATUS REGISTER
  62. SRXH    EQU    $FFF6        ;SCI RECEIVE IN    HIGH BYTE
  63. PBC    equ    $FFE0        ;port B    control
  64. PBDDR    equ    $FFE2        ;port B    data direction
  65. PBD    equ    $FFE4        ;port B    data
  66. BCR    equ    $FFFE        ;port a bus control reg
  67. #ifdef ROM
  68. LDRMEM    EQU    $198        ;START OF LOADER IN P MEMORY
  69. #else
  70. #ifdef HIGH
  71. LDRMEM    EQU    $F000        ;START OF LOADER IN P MEMORY
  72. #else
  73. LDRMEM    EQU    $80        ;START OF LOADER IN P MEMORY
  74. #endif
  75. #endif
  76.  
  77.     ORG    P:$0000        ;RESET VECTOR FOR BOOTING
  78. RVEC
  79.     JMP    <LOAD        ;GO EXECUTE LOADER
  80.  
  81.     ORG    P:LDRMEM,P:3*LDRMEM
  82. LOAD
  83.     MOVEP    #$0302,X:SCR    ;ENABLE    TX,RX: 8 BIT 1 START, 1    STOP
  84.  
  85.                 ; *** You will probably    have to
  86.                 ; *** change the line below!
  87.     movep    #12,x:SCCR    ;CD=12 (/13), int clk @ 31.25 Kbaud-4%
  88.     MOVEP    #$0007,X:PCC    ;ENABLE    SCI
  89.  
  90. #define MSG(m) movep    #m<<7,x:PBD
  91.  
  92.     MSG(0)
  93.     movep    #0,x:PBC    ;port B: parallel I/O
  94.     movep    #-1,x:PBDDR    ;port B: all output
  95.     bset    #3,x:PBD    ;assert "ROM"; allows RAM to respond in P space
  96.         movep    #$2f2f,x:BCR    ;wait states: 0 for RAM, 15 for ROM and I/O
  97.     MSG($c)
  98.     MSG($c|3<<4)        ;clear strobes
  99.  
  100. WTUS
  101.     JSR    <GETCH        ;INPUT CHARACTER
  102.     MOVE    #'_',X0        ;GET UNDERSCORE    CHARACTER
  103.     CMP    X0,A        ;SEE IF    "_" YET
  104.     JNE    <WTUS        ;NO
  105. GOTUS
  106.     JSR    <GETCH        ;GET A CHARACTER
  107.     MOVE    #'D',X0        ;GET A D FOR DATA
  108.     CMP    X0,A    #'E',X0    ;COMPARE TO D, GET E
  109.     JEQ    <DATAREC    ;IF "D", THEN DATA RECORD
  110.     CMP    X0,A        ;SEE IF    END RECORD
  111.     JNE    <WTUS        ;NO, GO    WAIT FOR ANOTHER UNDERSCORE
  112. _WTSPC
  113.     MSG($e)
  114.     JSR    <GETCH        ;GET CHARACTER
  115.     MOVE    #$20,X0        ;GET SPACE
  116.     CMP    X0,A        ;WAIT FOR SPACE    AFTER "END"
  117.     JNE    <_WTSPC        ;WAIT FOR SPACE
  118.     JSR    <IN4        ;GET TRANSFER ADDRESS
  119.     MOVE    B1,R0        ;MOVE TRANSFER ADDRESS
  120.     NOP            ;CLEAR ADDRESS PIPE
  121.     MSG($a)
  122.     JMP    (R0)        ;GO EXECUTE USER CODE
  123. DATAREC
  124.     MSG($d)
  125.     JSR    <GETCH        ;GET CHARACTER
  126.     MOVE    #$20,X0        ;GET SPACE
  127.     CMP    X0,A        ;SEE IF    SPACE
  128.     JNE    <DATAREC    ;NO
  129.     JSR    <GETCH        ;GET [P,X,Y]
  130.     MOVE    A1,Y0        ;SAVE CHARACTER
  131.     JSR    <IN4        ;GET ADDRESS OF    DATA RECORD
  132.     MOVE    B1,R0        ;SAVE ADDRESS
  133.     MOVE        #'X',A    ;GET X
  134.     CMP    Y0,A    #'Y',A    ;SEE IF    X, GET Y
  135.     JEQ    <_LDX        ;LOAD DATA INTO    X MEMORY
  136.     CMP    Y0,A        ;SEE IF    Y
  137.     JEQ    <_LDY        ;LOAD DATA INTO    Y MEMORY
  138. _LDP
  139.     JSR    <IN6        ;GET DATA
  140.     MOVEM    B1,P:(R0)+    ;LOAD P    MEMORY
  141.     JMP    <_LDP
  142. _LDX
  143.     JSR    <IN6        ;GET DATA
  144.     MOVE    B1,X:(R0)+    ;LOAD X    MEMORY
  145.     JMP    <_LDX
  146. _LDY
  147.     JSR    <IN6        ;GET DATA
  148.     MOVE    B1,Y:(R0)+    ;LOAD Y    MEMORY
  149.     JMP    <_LDY
  150.  
  151. GETCH
  152.     JCLR    #RDRF,X:SSR,*    ;WAIT FOR DATA IN SCI
  153.     MOVEP    X:SRXH,A    ;GET SCI DATA IN HIGH BYTE
  154.     LSL    A        ;SHIFT OUT PARITY
  155.     LSR    A        ;clear parity bit
  156.     MOVE    A1,A        ;SIGN EXTEND AND ZERO
  157.     MOVEP    A,X:SRXH    ;put sci data in high byte
  158.         RTS
  159. IN4
  160.     MSG($4)
  161.     CLR    B    #>4,X0    ;CLEAR VALUE, GET 4
  162.     JMP    <READHEX    ;READ 4    HEX CHARACTERS
  163. IN6
  164.     MSG($6)
  165.     CLR    B    #>6,X0    ;CLEAR VALUE, GET 6
  166. READHEX
  167.     DO    X0,_READHEX    ;READ ASCII HEX    AND CONVERT TO BINARY
  168. _GET
  169.     JSR    <GETCH        ;GET A CHARACTER
  170.     MOVE    #'_',X0        ;GET UNDERSCORE
  171.     CMP    X0,A    #'F',X0    ;SEE IF    UNDERSCORE
  172.     JNE    <_NOTUS        ;NO
  173.     ENDDO            ;EXIT LOOP
  174.     MOVEC    SSH,X0        ;POP RETURN ADDRESS
  175.     JMP    <GOTUS        ;GO PROCESS NEW    INPUT RECORD
  176. _NOTUS
  177.     CMP    X0,A    #'0',X0    ;SEE IF    GREATER    THAN F
  178.     JGT    <_GET        ;YES, IGNORE
  179.     CMP    X0,A        ;SEE IF    LESS THAN 0
  180.     JLT    <_GET        ;YES, IGNORE
  181.     SUB    X0,A    #10,X0    ;ADJUST    FOR ASCII TO BINARY
  182.     CMP    X0,A    #7,X0    ;SEE IF    A-F
  183.     JLT    <_NOTALPHA    ;NO
  184.     SUB    X0,A        ;ADJUST    FOR 1-F
  185. _NOTALPHA
  186.     REP    #4        ;SHIFT OLD VALUE LEFT 1    NIBBLE
  187.     LSL    B
  188.     REP    #16        ;SHIFT NEW NIBBLE DOWN TO LSB
  189.     LSR    A
  190.     ADD    A,B        ;ADD NEW NIBBLE    IN
  191. _READHEX
  192.     RTS
  193.     END
  194.  
  195.